home *** CD-ROM | disk | FTP | other *** search
/ CD Actual 53 / PC Actual CD 53.iso / Linux / Java / Bluej / bluej-111.jar / Installer.class (.txt) next >
Encoding:
Java Class File  |  2000-09-15  |  1003.1 KB  |  741 lines

  1. import java.awt.BorderLayout;
  2. import java.awt.Color;
  3. import java.awt.Component;
  4. import java.awt.Container;
  5. import java.awt.Frame;
  6. import java.awt.GridLayout;
  7. import java.awt.Image;
  8. import java.awt.Window;
  9. import java.awt.event.ActionEvent;
  10. import java.awt.event.ActionListener;
  11. import java.io.BufferedInputStream;
  12. import java.io.File;
  13. import java.io.FileInputStream;
  14. import java.io.FileNotFoundException;
  15. import java.io.FileOutputStream;
  16. import java.io.FileWriter;
  17. import java.io.IOException;
  18. import java.io.InputStream;
  19. import java.io.ObjectInputStream;
  20. import java.io.ObjectOutputStream;
  21. import java.io.OutputStreamWriter;
  22. import java.io.RandomAccessFile;
  23. import java.io.Writer;
  24. import java.util.Enumeration;
  25. import java.util.EventObject;
  26. import java.util.Hashtable;
  27. import java.util.Properties;
  28. import java.util.StringTokenizer;
  29. import java.util.zip.ZipEntry;
  30. import java.util.zip.ZipException;
  31. import java.util.zip.ZipInputStream;
  32. import javax.swing.BorderFactory;
  33. import javax.swing.Box;
  34. import javax.swing.ButtonGroup;
  35. import javax.swing.ImageIcon;
  36. import javax.swing.JButton;
  37. import javax.swing.JComponent;
  38. import javax.swing.JFileChooser;
  39. import javax.swing.JFrame;
  40. import javax.swing.JLabel;
  41. import javax.swing.JOptionPane;
  42. import javax.swing.JPanel;
  43. import javax.swing.JProgressBar;
  44. import javax.swing.JRadioButton;
  45. import javax.swing.JTextField;
  46. import javax.swing.KeyStroke;
  47. import javax.swing.Timer;
  48. import javax.swing.text.JTextComponent;
  49. import javax.swing.text.Keymap;
  50.  
  51. public class Installer extends JFrame implements ActionListener {
  52.    private static final String libDir = "lib";
  53.    private static final String syslibs = "syslibs.properties";
  54.    private static final String standardClasses = "classes.zip";
  55.    // $FF: renamed from: nl java.lang.String
  56.    private static final String field_0 = System.getProperty("line.separator");
  57.    private static final char slash;
  58.    private static final String colon;
  59.    private static String jdkFile;
  60.    static final int BUFFER_SIZE = 8192;
  61.    Color backgroundColour;
  62.    Color textColour;
  63.    JTextField directoryField;
  64.    JTextField javaField;
  65.    JLabel textLabel1;
  66.    JLabel textLabel2;
  67.    JButton browseDirButton;
  68.    JButton browseJdkButton;
  69.    JRadioButton jdk12Button;
  70.    JRadioButton jdk13Button;
  71.    JButton installButton;
  72.    JButton cancelButton;
  73.    JProgressBar progress;
  74.    int progressPercent = 0;
  75.    Timer timer;
  76.    String currentDirectory = System.getProperty("user.dir");
  77.    String osname;
  78.    String architecture;
  79.    String javaVersion;
  80.    boolean isJDK12;
  81.    String installationDir = "";
  82.    String javaPath = "";
  83.    Hashtable properties;
  84.    long myTotalBytes;
  85.  
  86.    static {
  87.       slash = File.separatorChar;
  88.       colon = File.pathSeparator;
  89.       jdkFile = "/lib/tools.jar";
  90.       JTextField var0 = new JTextField();
  91.       KeyStroke var1 = KeyStroke.getKeyStroke(10, 0);
  92.       Keymap var2 = ((JTextComponent)var0).getKeymap();
  93.       var2.removeKeyStrokeBinding(var1);
  94.    }
  95.  
  96.    public Installer() {
  97.       if (this.currentDirectory.endsWith("bluej")) {
  98.          this.installationDir = this.currentDirectory;
  99.       } else {
  100.          this.installationDir = this.currentDirectory + File.separator + "bluej";
  101.       }
  102.  
  103.       this.osname = System.getProperty("os.name");
  104.       this.architecture = System.getProperty("os.arch");
  105.       this.javaVersion = System.getProperty("java.version");
  106.       this.isJDK12 = this.javaVersion.startsWith("1.2");
  107.       this.javaPath = this.findJavaPath();
  108.       this.unpackTo(false);
  109.       this.makeWindow();
  110.    }
  111.  
  112.    public void actionPerformed(ActionEvent var1) {
  113.       Object var2 = ((EventObject)var1).getSource();
  114.       if (var2 == this.browseDirButton) {
  115.          this.getInstallDirectory();
  116.       } else if (var2 == this.browseJdkButton) {
  117.          this.getJDKDirectory();
  118.       } else if (var2 == this.installButton) {
  119.          Installer$InstallThread var3 = new Installer$InstallThread(this);
  120.          ((Thread)var3).setPriority(2);
  121.          ((Thread)var3).start();
  122.          this.timer.start();
  123.       } else if (var2 == this.cancelButton) {
  124.          this.doCancel();
  125.       }
  126.  
  127.    }
  128.  
  129.    private static void buildInstaller(String var0) {
  130.       try {
  131.          Hashtable var1 = loadProperties(var0);
  132.          RandomAccessFile var2 = new RandomAccessFile("Installer.class", "rw");
  133.          BufferedInputStream var3 = new BufferedInputStream(new FileInputStream((String)var1.get("pkgJar")));
  134.          long var4 = 0L;
  135.          byte[] var7 = new byte[8192];
  136.          var2.seek(var2.length());
  137.          System.err.println("Original file is " + var2.length());
  138.          long var8 = var2.length();
  139.          ObjectOutputStream var10 = new ObjectOutputStream(new FileOutputStream(var2.getFD()));
  140.          if (var10 == null) {
  141.             System.err.println("Could not open output file");
  142.          }
  143.  
  144.          var10.writeObject(var1);
  145.          var10.flush();
  146.  
  147.          int var6;
  148.          while((var6 = var3.read(var7, 0, 8192)) != -1) {
  149.             var2.write(var7, 0, var6);
  150.             var4 += (long)var6;
  151.          }
  152.  
  153.          System.err.println("Jar is " + var4 + " bytes.");
  154.          var4 = var2.length() - var8;
  155.          System.err.println("Added a total of " + var4 + " bytes.");
  156.          System.err.println("New size is " + var2.length());
  157.          var2.writeLong(var4);
  158.          var2.close();
  159.          var3.close();
  160.          System.err.println("Done.");
  161.       } catch (IOException var11) {
  162.          System.err.println("Couldn't build installer: " + ((Throwable)var11).getMessage());
  163.          System.exit(1);
  164.       }
  165.  
  166.    }
  167.  
  168.    private boolean checkInstallDir(String var1, boolean var2) {
  169.       File var3 = new File(var1);
  170.       if (var3.exists()) {
  171.          if (var3.isDirectory()) {
  172.             return true;
  173.          } else {
  174.             this.notifyProblem("The name you specified exists\nand is not a directory. Cannot\ninstall there.");
  175.             return false;
  176.          }
  177.       } else {
  178.          File var4 = var3.getParentFile();
  179.          if (var4.exists()) {
  180.             if (var4.isDirectory()) {
  181.                if (var2) {
  182.                   var3.mkdir();
  183.                }
  184.  
  185.                return true;
  186.             } else {
  187.                this.notifyProblem(var4.getAbsolutePath() + " is not\n" + "a directory. Cannot install there.");
  188.                return false;
  189.             }
  190.          } else {
  191.             this.notifyProblem("The directory " + var4.getAbsolutePath() + "\ndoes not exist.\n" + "Please check the path and enter again.");
  192.             return false;
  193.          }
  194.       }
  195.    }
  196.  
  197.    private void doCancel() {
  198.       System.exit(0);
  199.    }
  200.  
  201.    public void doInstall() {
  202.       this.readInputValues();
  203.       if (!this.isJDKPath(this.javaPath)) {
  204.          this.jdkPathProblem();
  205.       } else {
  206.          try {
  207.             if (!this.checkInstallDir(this.installationDir, true)) {
  208.                return;
  209.             }
  210.  
  211.             this.unpackTo(true);
  212.             if (this.getProperty("exeName") != null) {
  213.                if (this.osname == null) {
  214.                   this.writeWindows();
  215.                   this.writeUnix();
  216.                } else if (this.osname.startsWith("Windows")) {
  217.                   if (this.isJDK12) {
  218.                      this.writeWindows12();
  219.                   } else {
  220.                      this.writeWindows();
  221.                   }
  222.                } else if (!this.isJDK12) {
  223.                   this.writeUnix();
  224.                } else if (this.osname.startsWith("Linux")) {
  225.                   this.writeUnix12(false);
  226.                } else {
  227.                   this.writeUnix12(true);
  228.                }
  229.             }
  230.          } catch (Exception var2) {
  231.             ((Throwable)var2).printStackTrace();
  232.             this.finish("Installation FAILED: ", ((Throwable)var2).getMessage());
  233.             return;
  234.          }
  235.  
  236.          if (this.getProperty("exeName") != null) {
  237.             this.finish("BlueJ has been installed to " + this.installationDir, "To run it, execute \"" + (String)this.getProperty("exeName") + "\".");
  238.          } else {
  239.             this.finish("The package has been installed to " + this.installationDir, " ");
  240.          }
  241.  
  242.       }
  243.    }
  244.  
  245.    public void dumpJar(String var1, FileInputStream var2) throws IOException, ZipException {
  246.       this.makeDirsFor(var1, "");
  247.       long var3 = 0L;
  248.       ZipInputStream var5 = new ZipInputStream(var2);
  249.       byte[] var6 = new byte[8192];
  250.  
  251.       while(true) {
  252.          ZipEntry var7 = var5.getNextEntry();
  253.          if (var7 == null) {
  254.             var5.close();
  255.             this.timer.stop();
  256.             this.progress.setValue(100);
  257.             return;
  258.          }
  259.  
  260.          String var8 = var1 + "/" + var7.getName();
  261.          if (var7.isDirectory()) {
  262.             File var12 = new File(var8);
  263.             var12.mkdirs();
  264.          } else {
  265.             if (var7.getName().indexOf(47) != -1) {
  266.                this.makeDirsFor(var1, var7.getName());
  267.             }
  268.  
  269.             FileOutputStream var9;
  270.             try {
  271.                var9 = new FileOutputStream(var8);
  272.             } catch (FileNotFoundException var11) {
  273.                throw new IOException("Couldn't write to specified file/directory");
  274.             }
  275.  
  276.             this.setStatus("extracting: " + var8);
  277.  
  278.             int var10;
  279.             while((var10 = var5.read(var6, 0, 8192)) != -1) {
  280.                var3 += (long)var10;
  281.                var9.write(var6, 0, var10);
  282.             }
  283.  
  284.             this.progressPercent = (int)(var3 * 100L / this.myTotalBytes / 4L);
  285.             var5.closeEntry();
  286.             var9.close();
  287.          }
  288.       }
  289.    }
  290.  
  291.    private String findJavaPath() {
  292.       String var1 = System.getProperty("java.home");
  293.       if (this.isJDKPath(var1)) {
  294.          return var1;
  295.       } else {
  296.          if (var1.endsWith("jre")) {
  297.             var1 = var1.substring(0, var1.length() - 4);
  298.             if (this.isJDKPath(var1)) {
  299.                return var1;
  300.             }
  301.          }
  302.  
  303.          String var2 = this.javaVersion.substring(0, this.javaVersion.length() - 2);
  304.          String[] var3 = new String[]{"C:\\jdk" + this.javaVersion, "C:\\jdk" + var2, "D:\\jdk" + this.javaVersion, "D:\\jdk" + var2, "/usr/java", "/usr/local/java", "/usr/jdk" + this.javaVersion, "/usr/jdk" + var2, "/usr/local/jdk" + this.javaVersion, "/usr/local/jdk" + var2};
  305.  
  306.          for(int var4 = 0; var4 < var3.length; ++var4) {
  307.             if (this.isJDKPath(var3[var4])) {
  308.                return var3[var4];
  309.             }
  310.          }
  311.  
  312.          return "";
  313.       }
  314.    }
  315.  
  316.    public void finish(String var1, String var2) {
  317.       this.textLabel1.setText(var1);
  318.       this.textLabel2.setText(var2);
  319.       this.installButton.setEnabled(false);
  320.       this.cancelButton.setText("Done");
  321.       ((JFrame)this).getRootPane().setDefaultButton(this.cancelButton);
  322.    }
  323.  
  324.    public String getDirName(String var1) {
  325.       JFileChooser var2 = new JFileChooser();
  326.       var2.setDialogTitle(var1);
  327.       var2.setFileSelectionMode(1);
  328.       int var3 = var2.showDialog(this, "Choose");
  329.       return var3 == 0 ? var2.getSelectedFile().getPath() : null;
  330.    }
  331.  
  332.    private void getInstallDirectory() {
  333.       String var1 = this.getDirName("Select installation directory");
  334.       if (var1 != null) {
  335.          if (var1.endsWith("bluej")) {
  336.             this.installationDir = var1;
  337.          } else {
  338.             this.installationDir = var1 + File.separator + "bluej";
  339.          }
  340.  
  341.          this.directoryField.setText(this.installationDir);
  342.          this.checkInstallDir(this.installationDir, false);
  343.       }
  344.  
  345.    }
  346.  
  347.    private void getJDKDirectory() {
  348.       String var1 = this.getDirName("Select JDK directory");
  349.       if (var1 != null) {
  350.          this.javaPath = var1;
  351.          this.javaField.setText(this.javaPath);
  352.          if (!this.isJDKPath(this.javaPath)) {
  353.             this.jdkPathProblem();
  354.          }
  355.       }
  356.  
  357.    }
  358.  
  359.    public Object getProperty(String var1) {
  360.       return this.properties.get(var1);
  361.    }
  362.  
  363.    public boolean isJDKPath(String var1) {
  364.       String var2 = var1 + jdkFile;
  365.       return (new File(var2)).exists();
  366.    }
  367.  
  368.    private void jdkPathProblem() {
  369.       this.notifyProblem("The Java directory you have specified is not a valid \nJDK directory. The JDK directory is the directory \nthat JDK (aka Java 2 SDK) was installed to. It must \nhave a subdirectory \"lib\" with a file named \n\"tools.jar\" in it.");
  370.    }
  371.  
  372.    public static Hashtable loadProperties(String var0) {
  373.       Hashtable var1 = new Hashtable();
  374.       Properties var2 = new Properties();
  375.  
  376.       try {
  377.          FileInputStream var3 = new FileInputStream(var0);
  378.          var2.load(var3);
  379.       } catch (Exception var12) {
  380.          System.err.println("Exception " + ((Throwable)var12).getMessage());
  381.       }
  382.  
  383.       String var13 = "color.";
  384.       String var4 = "gif.";
  385.  
  386.       Object var7;
  387.       String var14;
  388.       for(Enumeration var5 = ((Hashtable)var2).keys(); var5.hasMoreElements(); var1.put(var14, var7)) {
  389.          var14 = (String)var5.nextElement();
  390.          var7 = var2.getProperty(var14);
  391.          var14 = var14.substring(var14.indexOf(46) + 1);
  392.          if (var14.regionMatches(0, var13, 0, var13.length())) {
  393.             StringTokenizer var8 = new StringTokenizer((String)var7, " \t,", false);
  394.             int var9 = Integer.valueOf(var8.nextToken());
  395.             int var10 = Integer.valueOf(var8.nextToken());
  396.             int var11 = Integer.valueOf(var8.nextToken());
  397.             var7 = new Color(var9, var10, var11);
  398.          } else if (var14.regionMatches(0, var4, 0, var4.length())) {
  399.             byte[] var15 = readGIF((String)var7);
  400.             var7 = var15;
  401.          }
  402.       }
  403.  
  404.       return var1;
  405.    }
  406.  
  407.    public static void main(String[] var0) {
  408.       if (var0.length > 0) {
  409.          if (var0[0].equals("build")) {
  410.             buildInstaller(var0[1]);
  411.          } else {
  412.             System.out.println("unknown argument: " + var0[0]);
  413.          }
  414.  
  415.          System.exit(0);
  416.       } else {
  417.          new Installer();
  418.       }
  419.  
  420.    }
  421.  
  422.    public void makeDirsFor(String var1, String var2) {
  423.       Object var3 = null;
  424.       StringTokenizer var4 = new StringTokenizer(var2, "/", false);
  425.       String var7 = var1;
  426.  
  427.       while(var4.hasMoreTokens()) {
  428.          String var5 = var4.nextToken();
  429.          if (var4.hasMoreTokens()) {
  430.             File var6 = new File(var7 + File.separatorChar + var5);
  431.             var7 = var6.toString();
  432.             var6.mkdirs();
  433.          }
  434.       }
  435.  
  436.    }
  437.  
  438.    public void makeWindow() {
  439.       this.backgroundColour = (Color)this.getProperty("color.background");
  440.       this.textColour = (Color)this.getProperty("color.text");
  441.       ((Component)this).setBackground(this.backgroundColour);
  442.       String var1 = (String)this.getProperty("title");
  443.       if (var1 != null) {
  444.          ((Frame)this).setTitle(var1);
  445.       }
  446.  
  447.       JPanel var2 = (JPanel)((JFrame)this).getContentPane();
  448.       ((Container)var2).setLayout(new BorderLayout(15, 15));
  449.       ((JComponent)var2).setBorder(BorderFactory.createEmptyBorder(20, 20, 20, 20));
  450.       ((JComponent)var2).setBackground(this.backgroundColour);
  451.       Image var3 = ((Window)this).getToolkit().createImage((byte[])this.getProperty("gif.logo"));
  452.       JLabel var4 = new JLabel(new ImageIcon(var3));
  453.       ((Container)var2).add(var4, "North");
  454.       JPanel var5 = new JPanel();
  455.       ((JComponent)var5).setBackground(this.backgroundColour);
  456.       this.installButton = new JButton("Install");
  457.       ((Container)var5).add(this.installButton);
  458.       this.installButton.addActionListener(this);
  459.       this.cancelButton = new JButton("Cancel");
  460.       ((Container)var5).add(this.cancelButton);
  461.       this.cancelButton.addActionListener(this);
  462.       ((Container)var2).add(var5, "South");
  463.       Box var6 = new Box(1);
  464.       Box var7 = new Box(0);
  465.       ((Container)var7).add(Box.createHorizontalGlue());
  466.       ((Container)var7).add(new JLabel("Directory to install to:"));
  467.       this.directoryField = new JTextField(this.installationDir, 16);
  468.       ((Container)var7).add(this.directoryField);
  469.       this.browseDirButton = new JButton("Browse");
  470.       this.browseDirButton.addActionListener(this);
  471.       ((Container)var7).add(this.browseDirButton);
  472.       ((Container)var6).add(var7);
  473.       ((Container)var6).add(Box.createVerticalStrut(5));
  474.       Box var8 = new Box(0);
  475.       ((Container)var8).add(Box.createHorizontalGlue());
  476.       ((Container)var8).add(new JLabel("Java (JDK) directory:"));
  477.       this.javaField = new JTextField(this.javaPath, 16);
  478.       ((Container)var8).add(this.javaField);
  479.       this.browseJdkButton = new JButton("Browse");
  480.       this.browseJdkButton.addActionListener(this);
  481.       ((Container)var8).add(this.browseJdkButton);
  482.       ((Container)var6).add(var8);
  483.       ((Container)var6).add(Box.createVerticalStrut(5));
  484.       Box var9 = new Box(0);
  485.       ((Container)var9).add(new JLabel("JDK version:", 2));
  486.       ((Container)var9).add(Box.createHorizontalStrut(20));
  487.       this.jdk12Button = new JRadioButton("jdk 1.2", this.isJDK12);
  488.       this.jdk13Button = new JRadioButton("jdk 1.3", this.isJDK12 ^ true);
  489.       this.jdk12Button.setBackground(this.backgroundColour);
  490.       this.jdk13Button.setBackground(this.backgroundColour);
  491.       ButtonGroup var10 = new ButtonGroup();
  492.       var10.add(this.jdk12Button);
  493.       var10.add(this.jdk13Button);
  494.       ((Container)var9).add(this.jdk12Button);
  495.       ((Container)var9).add(this.jdk13Button);
  496.       ((Container)var9).add(Box.createHorizontalGlue());
  497.       ((Container)var6).add(var9);
  498.       ((Container)var6).add(Box.createVerticalStrut(12));
  499.       this.progress = new JProgressBar();
  500.       ((Container)var6).add(this.progress);
  501.       ((Container)var6).add(Box.createVerticalStrut(5));
  502.       JPanel var11 = new JPanel(new GridLayout(0, 1));
  503.       ((JComponent)var11).setBackground(this.backgroundColour);
  504.       this.textLabel1 = new JLabel(" ", 2);
  505.       ((Container)var11).add(this.textLabel1);
  506.       this.textLabel2 = new JLabel(" ", 2);
  507.       ((Container)var11).add(this.textLabel2);
  508.       ((Container)var6).add(var11);
  509.       String var12 = (String)this.getProperty("tagline");
  510.       if (var12 != null) {
  511.          this.textLabel2.setText(var12);
  512.       }
  513.  
  514.       ((Container)var2).add(var6, "Center");
  515.       ((JFrame)this).getRootPane().setDefaultButton(this.installButton);
  516.       ((Window)this).pack();
  517.       ((Component)this).setLocation(100, 100);
  518.       ((Component)this).setVisible(true);
  519.       this.timer = new Timer(50, new Installer$1(this));
  520.       ((Window)this).addWindowListener(new Installer$2(this));
  521.    }
  522.  
  523.    public void notifyError(String var1, String var2) {
  524.       JOptionPane.showMessageDialog(this, var1);
  525.       this.finish(var2, "Installation aborted.");
  526.    }
  527.  
  528.    private void notifyProblem(String var1) {
  529.       JOptionPane.showMessageDialog(this, var1);
  530.    }
  531.  
  532.    public static byte[] readGIF(String var0) {
  533.       int var1 = (int)(new File(var0)).length();
  534.       byte[] var2 = new byte[var1];
  535.       System.err.println("Loading gif '" + var0 + "' (" + var1 + " bytes)");
  536.  
  537.       try {
  538.          FileInputStream var3 = new FileInputStream(var0);
  539.          var3.read(var2, 0, var1);
  540.          var3.close();
  541.       } catch (IOException var4) {
  542.          System.err.println("Couldn't load gif: " + ((Throwable)var4).getMessage());
  543.       }
  544.  
  545.       return var2;
  546.    }
  547.  
  548.    private void readInputValues() {
  549.       this.installationDir = this.directoryField.getText();
  550.       this.javaPath = this.javaField.getText();
  551.       this.isJDK12 = this.jdk12Button.isSelected();
  552.    }
  553.  
  554.    String replace(String var1, char var2, String var3) {
  555.       char[] var4 = new char[]{var2};
  556.       String var5 = new String(var4);
  557.       StringTokenizer var6 = new StringTokenizer(var1, var5, true);
  558.       StringBuffer var7 = new StringBuffer();
  559.  
  560.       while(var6.hasMoreElements()) {
  561.          String var8 = var6.nextToken();
  562.          if (var8.length() == 1 && var8.equals(var5)) {
  563.             var7.append(var3);
  564.          } else {
  565.             var7.append(var8);
  566.          }
  567.       }
  568.  
  569.       return var7.toString();
  570.    }
  571.  
  572.    public void setStatus(String var1) {
  573.       this.textLabel1.setText(var1);
  574.       this.textLabel1.repaint();
  575.    }
  576.  
  577.    public void unpackTo(boolean var1) {
  578.       try {
  579.          InputStream var2 = ClassLoader.getSystemResourceAsStream("Installer.class");
  580.          FileOutputStream var3 = new FileOutputStream("Installer.class.tmp");
  581.          byte[] var4 = new byte[8192];
  582.  
  583.          int var5;
  584.          while((var5 = var2.read(var4)) != -1) {
  585.             var3.write(var4, 0, var5);
  586.          }
  587.  
  588.          var2.close();
  589.          var3.close();
  590.          RandomAccessFile var6 = new RandomAccessFile("Installer.class.tmp", "r");
  591.          var6.seek(var6.length() - 8L);
  592.          long var7 = var6.readLong();
  593.          var6.seek(var6.length() - 8L - var7);
  594.          this.myTotalBytes = var7;
  595.          ObjectInputStream var9 = new ObjectInputStream(new FileInputStream(var6.getFD()));
  596.  
  597.          try {
  598.             this.properties = (Hashtable)var9.readObject();
  599.          } catch (ClassNotFoundException var11) {
  600.             System.err.println(((Throwable)var11).getMessage());
  601.          }
  602.  
  603.          if (var1) {
  604.             this.dumpJar(this.installationDir, new FileInputStream(var6.getFD()));
  605.          }
  606.  
  607.          var6.close();
  608.          (new File("Installer.class.tmp")).delete();
  609.       } catch (Exception var12) {
  610.          this.notifyError("Installer failed to open: " + var12, "Could not open install file.");
  611.       }
  612.  
  613.    }
  614.  
  615.    public void writeUnix() throws IOException {
  616.       File var1 = new File(this.installationDir, (String)this.getProperty("exeName"));
  617.       FileWriter var2 = new FileWriter(var1.toString());
  618.       ((Writer)var2).write("#!/bin/sh\n");
  619.       ((Writer)var2).write("APPBASE=" + this.installationDir + "\n");
  620.       String var3 = this.getProperty("unixCommands").toString();
  621.       if (var3 != null) {
  622.          var3 = this.replace(var3, '~', "$APPBASE");
  623.          var3 = this.replace(var3, '!', this.javaPath);
  624.          var3 = this.replace(var3, '@', this.architecture);
  625.          ((Writer)var2).write(var3);
  626.          ((Writer)var2).write("\n");
  627.       }
  628.  
  629.       String var4 = this.getProperty("classpath").toString();
  630.       var4 = var4.replace(';', ':');
  631.       var4 = this.replace(var4, '~', "$APPBASE");
  632.       var4 = this.replace(var4, '!', this.javaPath);
  633.       var4 = this.replace(var4, '@', this.architecture);
  634.       ((Writer)var2).write("CLASSPATH=" + var4 + ":$CLASSPATH\n");
  635.       ((Writer)var2).write("export CLASSPATH\n");
  636.       ((Writer)var2).write(this.javaPath + "/bin/java " + this.getProperty("javaOpts") + " -D" + this.getProperty("installDirProp") + "=$APPBASE " + this.getProperty("mainClass") + " $*\n");
  637.       ((OutputStreamWriter)var2).close();
  638.  
  639.       try {
  640.          Runtime.getRuntime().exec("chmod 755 " + var1);
  641.       } catch (Exception var5) {
  642.       }
  643.  
  644.    }
  645.  
  646.    public void writeUnix12(boolean var1) throws IOException {
  647.       File var2 = new File(this.installationDir, (String)this.getProperty("exeName"));
  648.       FileWriter var3 = new FileWriter(var2.toString());
  649.       ((Writer)var3).write("#!/bin/sh\n");
  650.       ((Writer)var3).write("APPBASE=" + this.installationDir + "\n");
  651.       String var4;
  652.       if (var1) {
  653.          var4 = this.getProperty("unixCommands.localJPDA").toString();
  654.       } else {
  655.          var4 = this.getProperty("unixCommands.systemJPDA").toString();
  656.       }
  657.  
  658.       if (var4 != null) {
  659.          var4 = this.replace(var4, '~', "$APPBASE");
  660.          var4 = this.replace(var4, '!', this.javaPath);
  661.          var4 = this.replace(var4, '@', this.architecture);
  662.          ((Writer)var3).write(var4);
  663.          ((Writer)var3).write("\n");
  664.       }
  665.  
  666.       String var5;
  667.       if (var1) {
  668.          var5 = this.getProperty("classpath.localJPDA").toString();
  669.       } else {
  670.          var5 = this.getProperty("classpath.systemJPDA").toString();
  671.       }
  672.  
  673.       var5 = var5.replace(';', ':');
  674.       var5 = this.replace(var5, '~', "$APPBASE");
  675.       var5 = this.replace(var5, '!', this.javaPath);
  676.       var5 = this.replace(var5, '@', this.architecture);
  677.       ((Writer)var3).write("CLASSPATH=" + var5 + ":$CLASSPATH\n");
  678.       ((Writer)var3).write("export CLASSPATH\n");
  679.       ((Writer)var3).write(this.javaPath + "/bin/java " + this.getProperty("javaOpts.1.2") + " -D" + this.getProperty("installDirProp") + "=$APPBASE " + this.getProperty("mainClass") + " $*\n");
  680.       ((OutputStreamWriter)var3).close();
  681.  
  682.       try {
  683.          Runtime.getRuntime().exec("chmod 755 " + var2);
  684.       } catch (Exception var6) {
  685.       }
  686.  
  687.    }
  688.  
  689.    public void writeWindows() throws IOException {
  690.       File var1 = new File(this.installationDir, (String)this.getProperty("exeName") + ".bat");
  691.       FileWriter var2 = new FileWriter(var1.toString());
  692.       ((Writer)var2).write("@echo off\r\n");
  693.       ((Writer)var2).write("set OLDPATH=%CLASSPATH%\r\n");
  694.       ((Writer)var2).write("set APPBASE=" + this.installationDir + "\r\n");
  695.       String var3 = this.getProperty("winCommands").toString();
  696.       if (var3 != null) {
  697.          var3 = this.replace(var3, '~', "%APPBASE%");
  698.          var3 = this.replace(var3, '!', this.javaPath);
  699.          var3 = this.replace(var3, '@', this.architecture);
  700.          ((Writer)var2).write(var3);
  701.          ((Writer)var2).write("\r\n");
  702.       }
  703.  
  704.       String var4 = this.getProperty("classpath").toString();
  705.       var4 = var4.replace('/', '\\');
  706.       var4 = this.replace(var4, '~', "%APPBASE%");
  707.       var4 = this.replace(var4, '!', this.javaPath);
  708.       var4 = this.replace(var4, '@', this.architecture);
  709.       ((Writer)var2).write("set CLASSPATH=" + var4 + ";%CLASSPATH%\r\n");
  710.       ((Writer)var2).write(this.javaPath + "\\bin\\java " + this.getProperty("javaOpts") + " -D" + this.getProperty("installDirProp") + "=%APPBASE% " + this.getProperty("mainClass") + " %1 %2 %3 %4 %5 %6 %7 %8 %9\r\n");
  711.       ((Writer)var2).write("set CLASSPATH=%OLDPATH%\r\n");
  712.       ((OutputStreamWriter)var2).close();
  713.    }
  714.  
  715.    public void writeWindows12() throws IOException {
  716.       File var1 = new File(this.installationDir, (String)this.getProperty("exeName") + ".bat");
  717.       FileWriter var2 = new FileWriter(var1.toString());
  718.       ((Writer)var2).write("@echo off\r\n");
  719.       ((Writer)var2).write("set OLDPATH=%CLASSPATH%\r\n");
  720.       ((Writer)var2).write("set APPBASE=" + this.installationDir + "\r\n");
  721.       String var3 = this.getProperty("winCommands.12").toString();
  722.       if (var3 != null) {
  723.          var3 = this.replace(var3, '~', "%APPBASE%");
  724.          var3 = this.replace(var3, '!', this.javaPath);
  725.          var3 = this.replace(var3, '@', this.architecture);
  726.          ((Writer)var2).write(var3);
  727.          ((Writer)var2).write("\r\n");
  728.       }
  729.  
  730.       String var4 = this.getProperty("classpath.localJPDA").toString();
  731.       var4 = var4.replace('/', '\\');
  732.       var4 = this.replace(var4, '~', "%APPBASE%");
  733.       var4 = this.replace(var4, '!', this.javaPath);
  734.       var4 = this.replace(var4, '@', this.architecture);
  735.       ((Writer)var2).write("set CLASSPATH=" + var4 + ";%CLASSPATH%\r\n");
  736.       ((Writer)var2).write(this.javaPath + "\\bin\\java " + this.getProperty("javaOpts.1.2") + " -D" + this.getProperty("installDirProp") + "=%APPBASE% " + this.getProperty("mainClass") + " %1 %2 %3 %4 %5 %6 %7 %8 %9\r\n");
  737.       ((Writer)var2).write("set CLASSPATH=%OLDPATH%\r\n");
  738.       ((OutputStreamWriter)var2).close();
  739.    }
  740. }
  741.